package util

import (
	"encoding/json"
	"github.com/gomodule/redigo/redis"
	"ubt-rbac-service/internal/app/model/sys_mod"
	"ubt-rbac-service/internal/core/logger"
)

// GetUserInfo 从缓冲中获取用户信息
func GetUserInfo(token string) *sys_mod.SysUserLoginRes {
	rdsConn := GetRdsConn()
	defer CloseConn(rdsConn)
	if userInfo, err := redis.String(rdsConn.Do("GET", token)); err == nil && userInfo != "" {
		var res *sys_mod.SysUserLoginRes
		if err = json.Unmarshal([]byte(userInfo), &res); err == nil {
			return res
		} else {
			logger.Error("用户对象转换失败。" + err.Error())
		}
	}
	return nil
}

// SaveUserInfo 把用户信息保存到缓冲中
func SaveUserInfo(key, value string) {
	rdsConn := GetRdsConn()
	defer CloseConn(rdsConn)
	// 写入缓冲数据
	if _, err := rdsConn.Do("SET", key, value); err == nil {
		// 设置失效时间（1小时）
		if _, err = rdsConn.Do("EXPIRE", key, 28800); err != nil {
			logger.Error("设置缓冲数据失效时间失败。" + err.Error())
		}
	} else {
		logger.Error("写入缓冲数据失败。" + err.Error())
	}
}

// CleanUserInfo 用户登出后清除缓冲信息
func CleanUserInfo(req *sys_mod.SysUserExitReq) {
	rdsConn := GetRdsConn()
	defer CloseConn(rdsConn)
	// 删除缓冲数据
	if _, err := rdsConn.Do("DEL", "rd_"+req.UserId); err != nil {
		logger.Error("设置缓冲数据失效时间失败。" + err.Error())
	}
	if _, err := rdsConn.Do("DEL", req.Token); err != nil {
		logger.Error("设置缓冲数据失效时间失败。" + err.Error())
	}
}
